import tempfile
import pathlib
from typing import List, IO

from llama_index.core.schema import Document
from llama_index.readers.file import UnstructuredReader

from ..data_parser_interface import DataParserInterface


class UnstructuredParser(DataParserInterface):
    """
    一个通用的、基于 Unstructured.io 的后备解析器。
    它能够处理多种文件类型，例如 .txt, .json, .eml 等，可作为默认解析器。
    """

    def parse(self, file: IO[bytes], file_format: str, **kwargs) -> List[Document]:
        """
        从任意支持的文件的二进制流中解析出 Document 对象。
        """
        # 核心修正：使用传入的 file_format 为临时文件创建正确的后缀
        suffix = f".{file_format}"
        
        # UnstructuredReader 需要一个明确的文件名来帮助推断文件类型，因此我们使用临时文件。
        with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp_file:
            tmp_file.write(file.read())
            tmp_file_path = pathlib.Path(tmp_file.name)

        try:
            reader = UnstructuredReader()
            return reader.load_data(file=tmp_file_path, **kwargs)
        finally:
            tmp_file_path.unlink() 